﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.seidel
    seidel迭代法
    参数 a: a[n][n]系数矩阵
    参数 b: b[n]常数向量
    参数 n: 
    参数 x: x[n]返回满足精度要求的解向量。若系数矩阵非对角优势，返回解向量0。
    参数 eps: 精度要求
    返回值 若系数矩阵非对角优势，则显示错误信息，并返回0标志值。否则返回非0标志值。
    */

    public static string drive_seidel()
    {
        int i;
        double eps;
        double[,] a = new double[4, 4] {
            {7.0,2.0,1.0,-2.0},
            {9.0,15.0,3.0,-2.0},
            {-2.0,-2.0,11.0,5.0},
            {1.0,3.0,2.0,13.0}
        };
        double[] x = new double[4];
        double[] b = new double[4]{
            4.0,7.0,-1.0,0.0
        };
        eps = 0.000001;

        string rs = "";
        rs += gl.html_table("Mat A:", a);
        rs += gl.html_table("Mat B:", b);

        i = gl.seidel(a, b, 4, x, eps);
        if (i == 0) return "error: 0";

        rs += gl.html_table("Mat X:", x);
        return rs;
    }
}